package sanrenxing.dayEnd.backRepertoryTotal.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import sanrenxing.dayEnd.backRepertoryTotal.dao.FundAllocationDao;
import sanrenxing.dayEnd.backRepertoryTotal.domain.Fun;
import sanrenxing.dayEnd.backRepertoryTotal.domain.FundAllocation;
import sanrenxing.dayEnd.backRepertoryTotal.service.FundAllocationBiz;

import javax.persistence.criteria.CriteriaBuilder;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @ClassName:资金调拨控制器
 * @description:孙祥兵
 * @date:2021/3/13 10:15
 * @version:1.0
 **/

@RestController
@RequestMapping("/fundAllocation")
public class FundAllocationController {

    //注入业务层处理对象
    @Autowired
    private FundAllocationBiz fundAllocationBiz;

    /**
     * 数据层接口
     */
    @Autowired
    private FundAllocationDao fundAllocationDao;

    /**
     * 多条件查询
     * @param req 请求对象
     * @param page 分页
     * @param limit 行数
     * @return 返回集合
     */
    @GetMapping("/fund")
    public Map<String,Object> selectFundAllocation(HttpServletRequest req,int page,int limit){
        //定义用于多条件查询的调拨对象
        FundAllocation fundAllocation=new FundAllocation();

        //获取来自请求中路径中调拨类型
        String reType=req.getParameter("reType");

        //判断调拨类型是否加入到调拨对象中
        if (reType!=null && reType.trim().length()!=0){
            fundAllocation.setReType(reType);
        }

        //获取来自请求中路径中资金流动方向
        String dial=req.getParameter("dial");
        //判断资金流动方向是否加入调拨对象中
        if (dial!=null && dial.trim().length()!=0){
            fundAllocation.setDial(Integer.parseInt(dial));
        }

        //调用数据方法，根据调拨对象构造查询条件字符串
        String condition=fundAllocationBiz.getCondition(fundAllocation);
        //执行多条件分页
        List<FundAllocation> fundAllocationList=fundAllocationBiz.findAll(limit,page,condition);
        //多条件查询表中总统计记录数
        int totalRows=fundAllocationBiz.count(condition);

        //定义映射集合对象
        Map<String,Object> mapData=new HashMap<String, Object>();
        //在映射集合中添加key为code,值为0的状态码
        mapData.put("code",0);
        //在映射集合中添加key为msg,值为响应信息字符串
        mapData.put("msg","");
        //在映射集合中添加key为count,值总行数的数据对
        mapData.put("count",totalRows);
        //在映射集合中添加key为data,值为调拨对象集合
        mapData.put("data",fundAllocationList);
        //在映射集合中添加key为queryFundSetpT,值为通过数据层查询资金
        mapData.put("queryFundSetpT",fundAllocationDao.queryFundSetpT());
        //在映射集合中添加key为queryCashAccountT,值为通过数据层查询现金账户
        mapData.put("queryCashAccountT",fundAllocationDao.queryCashAccountT());
        //直接返回对象
        return mapData;
    }

    /**
     * 删除一行数据
     * @param tofId 调拔编号
     * @return 0：删除成功，1删除失败
     */
    @DeleteMapping("/fund/{tofId}")
    public String deleteById(@PathVariable int tofId){
        //调用业务层删除资金调拨
        int rows=fundAllocationBiz.delete(tofId);
        //返回结果
        return rows>0?"delete success":"delete failure";
    }

    /**
     * 增加一行数据
     * @param fundAllocation 调拔对象
     * @return 0：增加成功，1：增加失败
     */
    @PostMapping("/fund")
    public String add(@RequestBody FundAllocation fundAllocation){
        //调用业务层增加调拨
        int rows=fundAllocationBiz.add(fundAllocation);
        //返回结果
        return rows>0?"add success":"add failure";
    }

    /**
     * 修改一行数据
     * @param fundAllocation 调拔对象
     * @return 0：修改成功，1：修改失败
     */
    @PutMapping("/fundAllocation")
    public String update(@RequestBody FundAllocation fundAllocation){
        //调用业务层修改数据
        int rows=fundAllocationBiz.update(fundAllocation);
        //返回结果
        return rows>0?"update success":"update failure";
    }

    /**
     * 批量删除
     * @param tofIdStr 定义调拨编号字符串
     * @return 0：批量删除成功，1：批量删除失败
     */
    @PutMapping("/batchDel")
    public String batchFundAllocation(@RequestParam String tofIdStr){
        //对调拨编号字符串按','分割
        String[] tofIdStrs=tofIdStr.split(",");
        //定义一个返回值
        String result="delete success";
        //循环删除
        for (String str:tofIdStrs){
            //转换类型
            int tofId=Integer.parseInt(str);
            //调用业务层删除资金调拨
            int rows=fundAllocationBiz.delete(tofId);
            //判断
            if (rows<0){
                //返回结果
                result="batch delete failure";
                break;
            }
        }
        return result;
    }


}
